home *** CD-ROM | disk | FTP | other *** search
/ LOGIC Apps / Logic-APPLE_II_APPS.iso / mac / LOGIC Apple II 5.25" Library - ProDOS / PRO003.dsk / SG.CONVERT.bas < prev    next >
BASIC Source File  |  2012-02-16  |  8KB  |  178 lines

  1. 5  ONERR  GOTO 800
  2. 10 TA = 16384:TE = 8192:D$ =  CHR$(4): SCALE= 1: ROT= 0:E = 0:C = 0
  3. 15  TEXT : HOME 
  4. 20  VTAB 4: PRINT "THIS PROGRAM WILL CONVERT A CONVENTIONALSHAPE TABLE TO ONE THAT CAN BE INCREASED";
  5. 25  PRINT "OR BE EDITED BY THE 'SHAPE.GENERATOR'   PROGRAM, OR BE 'UNCONVERTED' BACK TO THEREGULAR FORMAT, WHICH USES LESS MEMORY."
  6. 30  PRINT "HOWEVER, EITHER FORMAT CAN BE USED."
  7. 35  VTAB 17: HTAB 6: PRINT "REGULAR  -->  EDIT FORMAT  <1>": PRINT : HTAB 6: PRINT "EDIT  -->  REGULAR FORMAT  <2>": VTAB 17: HTAB 34: GET A$
  8. 40  IF A$ = "2"  THEN C = 2:TA = 8192:TE = 16384
  9. 45  HOME : VTAB 7: PRINT "INPUT EXACT NAME OF EXISTING SHAPE TABLE": IF C = 2  THEN  PRINT "(IT MUST HAVE '.SG' AT THE END BUT DON'T": PRINT "TYPE THE '.SG')": PRINT 
  10. 50  HTAB 10: INPUT N$
  11. 55  IF C = 0  THEN  IF  RIGHT$(N$,3) = ".SG"  THEN  INVERSE : PRINT : HTAB 5: PRINT "THIS TABLE IS ALREADY CONVERTED.": NORMAL : END 
  12. 60  IF C = 0  THEN  PRINT D$;"BLOAD ";N$;",A$2000"
  13. 65  IF C = 2  THEN  PRINT D$;"BLOAD ";N$;".SG,A$4000"
  14. 70  POKE 216,0:N = ( PEEK(TE +2) +256 * PEEK(TE +3) -2 -C)/2
  15. 75 SO =  PEEK(TE):SN = 1:SP = 1
  16. 80  VTAB 16: PRINT "DO YOU WANT TO INCREASE, OR DECREASE THE": PRINT "CAPACITY OF THE TABLE WHEN CONVERTED   ?";: VTAB 18: HTAB 40: GET A$
  17. 85  IF A$ = "Y"  THEN 100
  18. 90  GOTO 200
  19. 94  REM  
  20. 95  REM INCREASE TABLE SIZE
  21. 96  REM 
  22. 100  HOME : VTAB 14: HTAB 7: PRINT "HOW MANY MORE SHAPES     ";: INPUT T
  23. 105  IF T >254  THEN 100
  24. 110  IF T <SO -N  THEN 145
  25. 115  IF (N +T) <256  THEN N = N +T: GOTO 200
  26. 120  VTAB 17: PRINT "  MAX. NUMBER IS 255; DO YOU WANT TO:": PRINT 
  27. 125  HTAB 7: PRINT "- INCREASE SIZE TO 255  <Y>": PRINT : HTAB 7: PRINT "- LEAVE AT PRESENT SIZE <N>   ";: GET A$
  28. 130  IF A$ = "N"  THEN 200
  29. 135  IF A$ = "Y"  THEN N = 255: GOTO 200
  30. 140  GOTO 120
  31. 145  VTAB 17: PRINT "  THAT WILL DELETE THE LAST ";: HTAB (32 - LEN( STR$(SO -N -T))): PRINT (SO -N -T);" SHAPES": PRINT : PRINT "  OF THE TABLE!       PROCEED <Y/N>  ?";: HTAB 38: GET A$
  32. 150  IF A$ = "Y"  THEN SO = N +T:N = SO: GOTO 200
  33. 155  GOTO 100
  34. 194  REM 
  35. 195  REM SET UP NEW TABLE
  36. 196  REM 
  37. 200  POKE TA,SO: POKE TA +1,0
  38. 205 A = (N *2 +4 -C): POKE TA +2,(A -256 * INT(A/256)): POKE TA +3, INT(A/256)
  39. 210 SB = (TA +A)
  40. 215  FOR I = (TA +5) TO (SB -1): POKE I,0: NEXT 
  41. 220  GOSUB 900
  42. 225  POKE 768,160: POKE 769,0: POKE 770,76: POKE 771,44: POKE 772,254
  43. 294  REM 
  44. 295  REM SHAPE ANALYSIS
  45. 296  REM 
  46. 300 SE = TE + PEEK(TE +SP *2 +C) +256 * PEEK(TE +SP *2 +1 +C)
  47. 305  GOSUB 950: IF C = 2  THEN 500
  48. 310 A = SE:SA = 23456
  49. 315 B =  PEEK(A)
  50. 320  IF B = 0  THEN  POKE SA,255:LS = A -SE +1: GOTO 400
  51. 325 B1 = B -( INT(B/8) *8): POKE SA,B1:SA = SA +1
  52. 330  IF B -B1 = 0  THEN 350
  53. 335 B2 =  INT((B - INT(B/64) *64)/8): POKE SA,B2:SA = SA +1
  54. 340  IF B -(B1 +B2 *8) = 0  THEN 350
  55. 345 B3 =  INT(B/64): POKE SA,B3:SA = SA +1
  56. 350 A = A +1: GOTO 315
  57. 394  REM 
  58. 395  REM CALCULATE GRID SIZE
  59. 396  REM 
  60. 400 X = 1:Y = 1:MX = 1:MY = 1:XH = 1:YV = 1:SA = 23456
  61. 402 M =  PEEK(SA): IF M = 255  THEN 500
  62. 405  IF M >3  THEN M = M -4
  63. 410  IF M = 0  THEN Y = Y -1: IF Y <MY  THEN MY = Y
  64. 415  IF M = 1  THEN X = X +1: IF X >MX  THEN MX = X
  65. 420  IF M = 2  THEN Y = Y +1: IF Y >YV  THEN YV = Y
  66. 425  IF M = 3  THEN X = X -1: IF X <XH  THEN XH = X
  67. 430  IF E = 1  THEN  IF (YV -MY) >14  OR (MX -XH) >24  THEN 440
  68. 435 SA = SA +1: GOTO 402
  69. 440  VTAB 17: HTAB 5: PRINT "THIS SHAPE IS LARGER THAN 25*15,": PRINT : HTAB 5: PRINT "AND IS TOO LARGE TO BE EDITED BY": PRINT : HTAB 5: PRINT "THE 'SHAPE GENER-EDITOR' PROGRAM"
  70. 445  VTAB 24: HTAB 10: INVERSE : PRINT " ANY KEY TO CONTINUE ": NORMAL : GET A$
  71. 450  HOME : VTAB 7: HTAB 10: PRINT "CHOOSE ONE BY NUMBER :-"
  72. 455  VTAB 11: HTAB 5: PRINT "1  --->  CONVERT SHAPE ANYWAY": PRINT : HTAB 5: PRINT "2  --->  DELETE THIS SHAPE": PRINT : HTAB 5: PRINT "3  --->  CONVERT ANOTHER TABLE": PRINT : HTAB 5: PRINT "4  --->  EXIT PROGRAM"
  73. 460 A =  PEEK( -16384): IF A >127  THEN 470
  74. 465  GOTO 460
  75. 470 A = A -176: IF A <1  OR A >4  THEN 460
  76. 475  POKE  -16368,0: IF A = 4  THEN  END 
  77. 480  IF A = 3  THEN 10
  78. 485  IF A = 2  THEN SO = SO -1:SP = SP +1: POKE TA,SO: GOTO 220
  79. 490 E = 1: GOSUB 900: GOSUB 950: GOTO 435
  80. 494  REM 
  81. 495  REM MOVE SHAPE, ADDRESS
  82. 496  REM 
  83. 500 SL =  PEEK(TE +SP *2):SH = (32 *(C/2 +1) + PEEK(TE +1 +SP *2))
  84. 505 RH = SH:RL = SL +LS -1
  85. 507  IF RL >255  THEN RL = RL -256:RH = RH +1: GOTO 507
  86. 508  IF RL <0  THEN RL = RL +256:RH = RH -1: GOTO 508
  87. 510 DL = (SB -256 * INT(SB/256)):DH =  INT(SB/256)
  88. 515  POKE 60,SL: POKE 61,SH
  89. 520  POKE 62,RL: POKE 63,RH
  90. 525  POKE 66,DL: POKE 67,DH
  91. 530  CALL 768
  92. 535  IF C = 2  THEN LS = RL -SL +256 *(RH -SH) +1
  93. 540 SB = SB +LS
  94. 545  IF C = 2  THEN 560
  95. 550 H = MX -XH +1:V = YV -MY +1:SX = 2 -XH:SY = YV
  96. 555  POKE SB,H: POKE SB +1,V: POKE SB +2,SX: POKE SB +3,SY:SB = SB +4
  97. 560 L = SB -TA:SN = SN +1:SP = SP +1
  98. 565  IF SP >SO  AND C = 2  THEN  PRINT  CHR$(7): GOTO 600
  99. 570  POKE (TA +SN *2),(L -256 * INT(L/256)): POKE (TA +1 +SN *2), INT(L/256)
  100. 575 E = 0: IF SP >SO  THEN  PRINT  CHR$(7): GOTO 600
  101. 580  GOTO 300
  102. 594  REM 
  103. 595  REM SAVE TO DISK
  104. 596  REM 
  105. 600 NE$ = N$: IF C = 2  THEN NE$ = NE$ +".SG"
  106. 605  HOME : VTAB 4: PRINT "THE ORIGINAL SHAPE TABLE THAT WAS NAMED:": HTAB (19 - LEN(NE$)/2): PRINT "<  ";NE$;"  >"
  107. 610  IF C = 2  THEN 635
  108. 615  PRINT : PRINT "HAS NOW BEEN CONVERTED SO THAT IT CAN BE": PRINT "EDITED, OR HAVE MORE SHAPES ADDED, USING"
  109. 620  PRINT "THE "; CHR$(34);"SHAPE GENER-EDITOR"; CHR$(34);" PROGRAM.  IT IS": PRINT "BEING SAVED TO THE DISK, UNDER THE NAME:": PRINT : HTAB (17 - LEN(N$)/2): PRINT "<  ";N$;".SG  >"
  110. 625  PRINT D$;"BSAVE ";N$;".SG,A$4000,L";L
  111. 630  GOTO 650
  112. 635  PRINT : PRINT "HAS NOW BEEN CHANGED BACK TO THE REGULAR": PRINT "FORMAT.   IT IS BEING SAVED TO THE DISK,"
  113. 640  PRINT "UNDER THE NAME:": PRINT : HTAB (19 - LEN(N$)/2): PRINT "<  ";N$;"  >"
  114. 645  PRINT D$;"BSAVE ";N$;",A$2000,L";L
  115. 650  VTAB 20: PRINT "LENGTH OF THE TABLE IS NOW"; TAB( 33 - LEN( STR$(L)));L;"  BYTES."
  116. 655  VTAB 24: HTAB 11: INVERSE : PRINT " ANY KEY TO CONTINUE ";: NORMAL 
  117. 660 A =  PEEK( -16384)
  118. 665  IF A >127  THEN  POKE  -16368,0: GOTO 700
  119. 670  GOTO 660
  120. 694  REM 
  121. 695  REM NEXT ACTIVITY MENU
  122. 696  REM 
  123. 700  HOME : VTAB 7: HTAB 10: PRINT "CHOOSE ONE BY NUMBER :-"
  124. 705  VTAB 11: HTAB 5: PRINT "1  --->  CONVERT ANOTHER TABLE": PRINT : HTAB 5: PRINT "2  --->  USE 'SHAPE GENER-EDITOR'
  125. 710  PRINT : HTAB 5: PRINT "3  --->  EXIT PROGRAM"
  126. 715 A =  PEEK( -16384)
  127. 720  IF A >127  THEN 730
  128. 725  GOTO 715
  129. 730 A = A -176: IF A <1  OR A >3  THEN 715
  130. 735  POKE  -16368,0
  131. 740  IF A = 3  THEN  END 
  132. 745  IF A = 2  THEN  POKE 103,1: POKE 104,96: POKE 24576,0: PRINT D$;"RUN SHAPE.GENERATOR"
  133. 750  GOTO 10
  134. 794  REM 
  135. 795  REM ONERR: 'FILE NOT FOUND'
  136. 796  REM 
  137. 800 A =  PEEK(222): IF A = 6  THEN 810
  138. 805  PRINT  CHR$(7): END 
  139. 810  HOME : VTAB 4: PRINT "FILE NOT FOUND  -  SEE CATALOG?  <Y/N> ";: GET A$: IF A$ = "N"  THEN 45
  140. 815  IF A$ = "Y"  THEN  PRINT "": GOTO 825
  141. 820  GOTO 810
  142. 825  PRINT D$;"CAT"
  143. 830  VTAB 24: HTAB 9: INVERSE : PRINT " ANY KEY TO CONTINUE ";: NORMAL 
  144. 835 A =  PEEK( -16384)
  145. 840  IF A >127  THEN  POKE  -16368,0: GOTO 15
  146. 845  GOTO 835
  147. 894  REM 
  148. 895  REM PRINT STATUS ROUTINES
  149. 896  REM  
  150. 900  HOME : VTAB 4: HTAB 7: PRINT "CAPACITY IS NOW  "; TAB( 27 - LEN( STR$(N)));N;"  SHAPES"
  151. 905  PRINT : HTAB 7: PRINT "TABLE NOW HAS"; TAB( 27 - LEN( STR$(SO)));SO;"  SHAPES"
  152. 910  RETURN 
  153. 950  VTAB 13: HTAB 7: PRINT "NOW CONVERTING SHAPE NO."
  154. 955  VTAB 13: HTAB (35 - LEN( STR$(SN))): CALL  -868: PRINT SN
  155. 960  RETURN 
  156. 1994  REM 
  157. 1995  REM 
  158. 1996  REM 
  159. 1997  REM 
  160. 1998  REM 
  161. 1999  REM 
  162. 2000  REM **********************
  163. 2001  REM *                    *
  164. 2002  REM *   'SHAPE  TABLE    *
  165. 2003  REM *     CONVERTER'     *
  166. 2004  REM *                    *
  167. 2005  REM * BY ALASTAIR SPEIRS *
  168. 2006  REM *                    *
  169. 2007  REM *      MAY 1984      *
  170. 2008  REM *                    *
  171. 2009  REM **********************
  172. 2010  REM 
  173. 2011  REM 
  174. 2012  REM 
  175. 2013  REM 
  176. 2014  REM 
  177. 2015  REM 
  178. 2505 RL =  PEEK(TE +2 +SP *2) -(2 *C +1):RH = (32 *(C/2 +1) + PEEK(TE +3 +SP *2)): IF RL <0  THEN RL = RL +256:RH = RH -1